package chapter08_class

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test03_Constructor
 * Package: chapter08_class
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-07-02
 *          Time: 20:38
 */

//构造器
object Test03_Constructor {
  def main(args: Array[String]): Unit = {
    //虽然主构造方法 没有参数列表 但是辅助构造方法有 而且都是先执行主构造器
    //val student = new Student1("alice",20)

    val student = new Student1

    student.age = 99
    student.name = "bob"

    println(student.name)
    println(student.age)

  }
}

//没有参数 参数列表可以省略括号
class Student1 {

  //创建属性
  var name: String = _
  var age: Int = _

  println("1.主构造方法被调用")

  //创建辅助构造器 函数名称必须是this 可以有多个
  //编译器通过参数的个数和类型来推断
  def this(name: String) {
    //辅助构造器不能直接构建对象 必须直接或者间接调用主构造器
    this() //直接调用
    println("2.辅助构造器方法一被调用")
    this.name = name
    println(s"name :${name} age:$age")
  }

  //第一个辅助构造函数
  def this(name: String, age: Int) {
    //间接调用主构造器 this(name)对应参数的辅助构造器 上面这个在调用this()
    this(name) //
    println("3.辅助构造器方法二被调用")
    this.age = age
    println(s"${name} age:$age")
  }


  def student1(): Unit = {
    println("函数名和类名一样 这个不是和Java一样的构造方法 而是普通方法")
  }


}